package list;
import java.util.Arrays;
public class MyList {
    public int[] array;
    public int usedSize;
    public static int CAPACITY = 2;//默认大小
    public MyList(int capacity){//用户自己创建
        this.array = new int[capacity];
        CAPACITY =  capacity;
    }
    public MyList(){//走默认大小
        this.array = new int[CAPACITY];
    }
    /**
     * 判断pos下标合法性
     */
    private boolean checkIndexLegal(int pos){
        if(pos < 0 || pos > usedSize){
            throw new PosIndexNotLegalException("下标输入异常!");
        }
        return true;
    }
    /**
     * 扩容
     */
    private void addCapecity(){
        array = Arrays.copyOf(array, CAPACITY + (CAPACITY << 1)/2);//扩容1.5倍
    }
    /**
     * 增加元素
     */
    public void add(int num){
        if(usedSize == CAPACITY){
            addCapecity();
        }
        array[usedSize++] = num;
    }
    /**
     * 在指定位置增加元素
     */
    public void add(int pos, int num){
        checkIndexLegal(pos);
        if(usedSize == CAPACITY){
            addCapecity();
        }
        int i = 0;
        for(i = usedSize - 1; i >= pos; i--){
            array[i + 1] = array[i];
        }
        array[pos] = num;
        usedSize++;
    }
    /**
     * 打印顺序表
     */
    public void printList(){
        int i = 0;
        for(i = 0; i < usedSize; i++){
            System.out.println(array[i]);
        }
    }
    /**
     * 检查查找pos元素下标是否合法
     */
    private boolean findIndexlegal(int pos){
        if(pos < 0 || pos >= usedSize){
            return false;
        }
        return true;
    }
    /**
     * 查找某个元素的位置
     */
    public int findIndex(int num){
            int i = 0;
            for(i = 0; i < usedSize; i++){
                if(array[i] == num){
                    return i;
                }
            }
        return -1;
    }
    /**
     * 查找某个元素是否存在
     */
    public boolean findExist(int num){
        int i = 0;
        for(i = 0; i < usedSize; i++){
            if(array[i] == num){
                return true;
            }
        }
        return false;
    }
    /**
     * 删除元素
     */
    public void remove(int num){
        int ret = findIndex(num);
        if(ret == -1){
            System.out.println("找不到该元素!");
            return;
        }
        int i = 0;
        for(i = ret; i < usedSize - 1; i++){
            array[i] = array[i + 1];
        }
        usedSize--;
    }
    /**
     * 更新pos下标位置的值
     */
    public void modify(int pos, int num){
        findIndexlegal(pos);
        array[pos] = num;
    }
    /**
     * 获取顺序表的长度
     */
    public int gainSize(){
        return usedSize;
    }
    /**
     * 清空顺序表
     */
    public void destroy(){
        usedSize = 0;
    }
}
